/* ***** BEGIN LICENSE BLOCK *****
 * Copyright 1993 by OpenVision Technologies, Inc.
 * 
 * Permission to use, copy, modify, distribute, and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appears in all copies and
 * that both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of OpenVision not be used
 * in advertising or publicity pertaining to distribution of the software
 * without specific, written prior permission. OpenVision makes no
 * representations about the suitability of this software for any
 * purpose.  It is provided "as is" without express or implied warranty.
 * 
 * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 ****** END LICENSE BLOCK ***** */

#ifndef GSSAPI_H_
#define GSSAPI_H_

/*
 * Also define _GSSAPI_H_ as that is what the Kerberos 5 code defines and
 * what header files on some systems look for.
 */
#define _GSSAPI_H_

/*
 * On Mac OS X, Kerberos/Kerberos.h is used to gain access to certain
 * system-specific Kerberos functions, but on 10.4, that file also brings
 * in other headers that conflict with this one.
 */
#define _GSSAPI_GENERIC_H_
#define _GSSAPI_KRB5_H_

/* 
 * Define windows specific needed parameters.
 */

#ifndef GSS_CALLCONV
#if defined(_WIN32)
#define GSS_CALLCONV __stdcall
#define GSS_CALLCONV_C __cdecl
#else
#define GSS_CALLCONV 
#define GSS_CALLCONV_C
#endif
#endif /* GSS_CALLCONV */

#ifdef GSS_USE_FUNCTION_POINTERS
#ifdef _WIN32
#undef GSS_CALLCONV
#define GSS_CALLCONV
#define GSS_FUNC(f) (__stdcall *f##_type)
#else
#define GSS_FUNC(f) (*f##_type)
#endif
#define GSS_MAKE_TYPEDEF typedef
#else
#define GSS_FUNC(f) f
#define GSS_MAKE_TYPEDEF
#endif

/*
 * First, include stddef.h to get size_t defined.
 */
#include <stddef.h>

/*
 * Configure set the following
 */

#ifndef SIZEOF_LONG
#undef SIZEOF_LONG 
#endif
#ifndef SIZEOF_SHORT
#undef SIZEOF_SHORT
#endif

#ifndef EXTERN_C_BEGIN
#ifdef __cplusplus
#define EXTERN_C_BEGIN extern "C" {
#define EXTERN_C_END }
#else
#define EXTERN_C_BEGIN
#define EXTERN_C_END
#endif
#endif

EXTERN_C_BEGIN

/*
 * If the platform supports the xom.h header file, it should be
 * included here.
 */
/* #include <xom.h> */


/*
 * Now define the three implementation-dependent types.
 */

typedef void * gss_name_t ;
typedef void * gss_ctx_id_t ;
typedef void * gss_cred_id_t ;
 

/*
 * The following type must be defined as the smallest natural
 * unsigned integer supported by the platform that has at least
 * 32 bits of precision.
 */

#if SIZEOF_LONG == 4
typedef unsigned long gss_uint32;
#elif SIZEOF_SHORT == 4
typedef unsigned short gss_uint32;
#else
typedef unsigned int gss_uint32;
#endif

#ifdef OM_STRING

/*
 * We have included the xom.h header file.  Verify that OM_uint32
 * is defined correctly.
 */

#if sizeof(gss_uint32) != sizeof(OM_uint32)
#error Incompatible definition of OM_uint32 from xom.h
#endif

typedef OM_object_identifier gss_OID_desc, *gss_OID;

#else /* !OM_STRING */

/*
 * We can't use X/Open definitions, so roll our own.               
 */
typedef gss_uint32 OM_uint32;
typedef struct gss_OID_desc_struct {
  OM_uint32 length;
  void *elements;
} gss_OID_desc, *gss_OID;

#endif /* !OM_STRING */

typedef struct gss_OID_set_desc_struct  {
  size_t     count;
  gss_OID    elements;
} gss_OID_set_desc, *gss_OID_set;


/*
 * For now, define a QOP-type as an OM_uint32
 */
typedef OM_uint32 gss_qop_t;

typedef int gss_cred_usage_t;


typedef struct gss_buffer_desc_struct {
  size_t length;
  void *value;
} gss_buffer_desc, *gss_buffer_t;

typedef struct gss_channel_bindings_struct {
  OM_uint32 initiator_addrtype;
  gss_buffer_desc initiator_address;
  OM_uint32 acceptor_addrtype;
  gss_buffer_desc acceptor_address;
  gss_buffer_desc application_data;
} *gss_channel_bindings_t;


/*
 * Flag bits for context-level services.
 */
#define GSS_C_DELEG_FLAG 1
#define GSS_C_MUTUAL_FLAG 2
#define GSS_C_REPLAY_FLAG 4
#define GSS_C_SEQUENCE_FLAG 8
#define GSS_C_CONF_FLAG 16
#define GSS_C_INTEG_FLAG 32
#define GSS_C_ANON_FLAG 64
#define GSS_C_PROT_READY_FLAG 128
#define GSS_C_TRANS_FLAG 256

/*
 * Credential usage options
 */
#define GSS_C_BOTH 0
#define GSS_C_INITIATE 1
#define GSS_C_ACCEPT 2

/*
 * Status code types for gss_display_status
 */
#define GSS_C_GSS_CODE 1
#define GSS_C_MECH_CODE 2

/*
 * The constant definitions for channel-bindings address families
 */
#define GSS_C_AF_UNSPEC     0
#define GSS_C_AF_LOCAL      1
#define GSS_C_AF_INET       2
#define GSS_C_AF_IMPLINK    3
#define GSS_C_AF_PUP        4
#define GSS_C_AF_CHAOS      5
#define GSS_C_AF_NS         6
#define GSS_C_AF_NBS        7
#define GSS_C_AF_ECMA       8
#define GSS_C_AF_DATAKIT    9
#define GSS_C_AF_CCITT      10
#define GSS_C_AF_SNA        11
#define GSS_C_AF_DECnet     12
#define GSS_C_AF_DLI        13
#define GSS_C_AF_LAT        14
#define GSS_C_AF_HYLINK     15
#define GSS_C_AF_APPLETALK  16
#define GSS_C_AF_BSC        17
#define GSS_C_AF_DSS        18
#define GSS_C_AF_OSI        19
#define GSS_C_AF_X25        21

#define GSS_C_AF_NULLADDR   255

/*
 * Various Null values
 */
#define GSS_C_NO_NAME ((gss_name_t) 0)
#define GSS_C_NO_BUFFER ((gss_buffer_t) 0)
#define GSS_C_NO_OID ((gss_OID) 0)
#define GSS_C_NO_OID_SET ((gss_OID_set) 0)
#define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0)
#define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0)
#define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0)
#define GSS_C_EMPTY_BUFFER {0, nullptr}

/*
 * Some alternate names for a couple of the above
 * values.  These are defined for V1 compatibility.
 */
#define GSS_C_NULL_OID GSS_C_NO_OID
#define GSS_C_NULL_OID_SET GSS_C_NO_OID_SET

/*
 * Define the default Quality of Protection for per-message
 * services.  Note that an implementation that offers multiple
 * levels of QOP may define GSS_C_QOP_DEFAULT to be either zero
 * (as done here) to mean "default protection", or to a specific
 * explicit QOP value.  However, a value of 0 should always be
 * interpreted by a GSSAPI implementation as a request for the
 * default protection level.
 */
#define GSS_C_QOP_DEFAULT 0

/*
 * Expiration time of 2^32-1 seconds means infinite lifetime for a
 * credential or security context
 */
#define GSS_C_INDEFINITE 0xfffffffful

/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {10, (void *)"\x2a\x86\x48\x86\xf7\x12"
 *              "\x01\x02\x01\x01"},
 * corresponding to an object-identifier value of
 * {iso(1) member-body(2) United States(840) mit(113554)
 *  infosys(1) gssapi(2) generic(1) user_name(1)}.  The constant
 * GSS_C_NT_USER_NAME should be initialized to point
 * to that gss_OID_desc.
 */
extern gss_OID GSS_C_NT_USER_NAME;

/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {10, (void *)"\x2a\x86\x48\x86\xf7\x12"
 *              "\x01\x02\x01\x02"},
 * corresponding to an object-identifier value of
 * {iso(1) member-body(2) United States(840) mit(113554)
 *  infosys(1) gssapi(2) generic(1) machine_uid_name(2)}.
 * The constant GSS_C_NT_MACHINE_UID_NAME should be
 * initialized to point to that gss_OID_desc.
 */
extern gss_OID GSS_C_NT_MACHINE_UID_NAME;

/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {10, (void *)"\x2a\x86\x48\x86\xf7\x12"
 *              "\x01\x02\x01\x03"},
 * corresponding to an object-identifier value of
 * {iso(1) member-body(2) United States(840) mit(113554)
 *  infosys(1) gssapi(2) generic(1) string_uid_name(3)}.
 * The constant GSS_C_NT_STRING_UID_NAME should be
 * initialized to point to that gss_OID_desc.
 */
extern gss_OID GSS_C_NT_STRING_UID_NAME;

/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {6, (void *)"\x2b\x06\x01\x05\x06\x02"},
 * corresponding to an object-identifier value of
 * {iso(1) org(3) dod(6) internet(1) security(5)
 * nametypes(6) gss-host-based-services(2)).  The constant
 * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point
 * to that gss_OID_desc.  This is a deprecated OID value, and
 * implementations wishing to support hostbased-service names
 * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID,
 * defined below, to identify such names; 
 * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym 
 * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input
 * parameter, but should not be emitted by GSSAPI 
 * implementations
 */
extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X;

/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {10, (void *)"\x2a\x86\x48\x86\xf7\x12"
 *              "\x01\x02\x01\x04"}, corresponding to an 
 * object-identifier value of {iso(1) member-body(2) 
 * Unites States(840) mit(113554) infosys(1) gssapi(2) 
 * generic(1) service_name(4)}.  The constant
 * GSS_C_NT_HOSTBASED_SERVICE should be initialized 
 * to point to that gss_OID_desc.  
 */
extern gss_OID GSS_C_NT_HOSTBASED_SERVICE;


/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {6, (void *)"\x2b\x06\01\x05\x06\x03"},
 * corresponding to an object identifier value of
 * {1(iso), 3(org), 6(dod), 1(internet), 5(security),
 * 6(nametypes), 3(gss-anonymous-name)}.  The constant
 * and GSS_C_NT_ANONYMOUS should be initialized to point
 * to that gss_OID_desc.
 */
extern gss_OID GSS_C_NT_ANONYMOUS;

/*
 * The implementation must reserve static storage for a
 * gss_OID_desc object containing the value
 * {6, (void *)"\x2b\x06\x01\x05\x06\x04"},
 * corresponding to an object-identifier value of
 * {1(iso), 3(org), 6(dod), 1(internet), 5(security),
 * 6(nametypes), 4(gss-api-exported-name)}.  The constant
 * GSS_C_NT_EXPORT_NAME should be initialized to point
 * to that gss_OID_desc.
 */
extern gss_OID GSS_C_NT_EXPORT_NAME;

/* Major status codes */

#define GSS_S_COMPLETE 0

/*
 * Some "helper" definitions to make the status code macros obvious.
 */
#define GSS_C_CALLING_ERROR_OFFSET 24
#define GSS_C_ROUTINE_ERROR_OFFSET 16
#define GSS_C_SUPPLEMENTARY_OFFSET 0
#define GSS_C_CALLING_ERROR_MASK 0377ul
#define GSS_C_ROUTINE_ERROR_MASK 0377ul
#define GSS_C_SUPPLEMENTARY_MASK 0177777ul

/*
 * The macros that test status codes for error conditions.
 * Note that the GSS_ERROR() macro has changed slightly from
 * the V1 GSSAPI so that it now evaluates its argument
 * only once.
 */
#define GSS_CALLING_ERROR(x) \
(x & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET))
#define GSS_ROUTINE_ERROR(x) \
     (x & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))
#define GSS_SUPPLEMENTARY_INFO(x) \
     (x & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET))
#define GSS_ERROR(x) \
     (x & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \
           (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)))

/*
 * Now the actual status code definitions
 */

/*
 * Calling errors:
 */
#define GSS_S_CALL_INACCESSIBLE_READ \
     (1ul << GSS_C_CALLING_ERROR_OFFSET)
#define GSS_S_CALL_INACCESSIBLE_WRITE \
     (2ul << GSS_C_CALLING_ERROR_OFFSET)
#define GSS_S_CALL_BAD_STRUCTURE \
     (3ul << GSS_C_CALLING_ERROR_OFFSET)

/*
 * Routine errors:
 */
#define GSS_S_BAD_MECH (1ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_NAME (2ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_NAMETYPE (3ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_BINDINGS (4ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_STATUS (5ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_SIG (6ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_MIC GSS_S_BAD_SIG
#define GSS_S_NO_CRED (7ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_NO_CONTEXT (8ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_DEFECTIVE_TOKEN (9ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_DEFECTIVE_CREDENTIAL (10ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_CREDENTIALS_EXPIRED (11ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_CONTEXT_EXPIRED (12ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_FAILURE (13ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_BAD_QOP (14ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_UNAUTHORIZED (15ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_UNAVAILABLE (16ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_DUPLICATE_ELEMENT (17ul << GSS_C_ROUTINE_ERROR_OFFSET)
#define GSS_S_NAME_NOT_MN (18ul << GSS_C_ROUTINE_ERROR_OFFSET)

/*
 * Supplementary info bits:
 */
#define GSS_S_CONTINUE_NEEDED (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 0))
#define GSS_S_DUPLICATE_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 1))
#define GSS_S_OLD_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 2))
#define GSS_S_UNSEQ_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 3))
#define GSS_S_GAP_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 4))

/*
 * Finally, function prototypes for the GSS-API routines.
 */

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_acquire_cred)
(OM_uint32 *,             /*  minor_status */
 const gss_name_t,        /* desired_name */
 OM_uint32,               /* time_req */
 const gss_OID_set,       /* desired_mechs */
 gss_cred_usage_t,        /* cred_usage */
 gss_cred_id_t *,         /* output_cred_handle */
 gss_OID_set *,           /* actual_mechs */
 OM_uint32 *              /* time_rec */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_release_cred)
(OM_uint32 *,             /* minor_status */
 gss_cred_id_t *          /* cred_handle */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_init_sec_context)
(OM_uint32 *,             /* minor_status */
 const gss_cred_id_t,     /* initiator_cred_handle */
 gss_ctx_id_t *,          /* context_handle */
 const gss_name_t,        /* target_name */
 const gss_OID,           /* mech_type */
 OM_uint32,               /* req_flags */
 OM_uint32,               /* time_req */
 const gss_channel_bindings_t, /* input_chan_bindings */
 const gss_buffer_t,      /* input_token */
 gss_OID *,               /* actual_mech_type */
 gss_buffer_t,            /* output_token */
 OM_uint32 *,             /* ret_flags */
 OM_uint32 *              /* time_rec */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_accept_sec_context)
(OM_uint32 *,             /* minor_status */
 gss_ctx_id_t *,          /* context_handle */
 const gss_cred_id_t,     /* acceptor_cred_handle */
 const gss_buffer_t,      /* input_token_buffer */
 const gss_channel_bindings_t, /* input_chan_bindings */
 gss_name_t *,            /* src_name */
 gss_OID *,               /* mech_type */
 gss_buffer_t,            /* output_token */
 OM_uint32 *,             /* ret_flags */
 OM_uint32 *,             /* time_rec */
 gss_cred_id_t *          /* delegated_cred_handle */
              );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_process_context_token)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 const gss_buffer_t       /* token_buffer */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_delete_sec_context)
(OM_uint32 *,             /* minor_status */
 gss_ctx_id_t *,          /* context_handle */
 gss_buffer_t             /* output_token */
 );

GSS_MAKE_TYPEDEF
OM_uint32
GSS_CALLCONV GSS_FUNC(gss_context_time)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 OM_uint32 *              /* time_rec */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_get_mic)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 gss_qop_t,               /* qop_req */
 const gss_buffer_t,      /* message_buffer */
 gss_buffer_t             /* message_token */
 );


GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_verify_mic)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 const gss_buffer_t,      /* message_buffer */
 const gss_buffer_t,      /* token_buffer */
 gss_qop_t *              /* qop_state */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_wrap)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 int,                     /* conf_req_flag */
 gss_qop_t,               /* qop_req */
 const gss_buffer_t,      /* input_message_buffer */
 int *,                   /* conf_state */
 gss_buffer_t             /* output_message_buffer */
 );


GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_unwrap)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 const gss_buffer_t,      /* input_message_buffer */
 gss_buffer_t,            /* output_message_buffer */
 int *,                   /* conf_state */
 gss_qop_t *              /* qop_state */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_display_status)
(OM_uint32 *,             /* minor_status */
 OM_uint32,               /* status_value */
 int,                     /* status_type */
 const gss_OID,           /* mech_type */
 OM_uint32 *,             /* message_context */
 gss_buffer_t             /* status_string */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_indicate_mechs)
(OM_uint32 *,             /* minor_status */
 gss_OID_set *            /* mech_set */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_compare_name)
(OM_uint32 *,             /* minor_status */
 const gss_name_t,        /* name1 */
 const gss_name_t,        /* name2 */
 int *                    /* name_equal */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_display_name)
(OM_uint32 *,             /* minor_status */
 const gss_name_t,        /* input_name */
 gss_buffer_t,            /* output_name_buffer */
 gss_OID *                /* output_name_type */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_import_name)
(OM_uint32 *,             /* minor_status */
 const gss_buffer_t,      /* input_name_buffer */
 const gss_OID,           /* input_name_type */
 gss_name_t *             /* output_name */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_export_name)
(OM_uint32  *,            /* minor_status */
 const gss_name_t,        /* input_name */
 gss_buffer_t             /* exported_name */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_release_name)
(OM_uint32 *,             /* minor_status */
 gss_name_t *             /* input_name */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_release_buffer)
(OM_uint32 *,             /* minor_status */
 gss_buffer_t             /* buffer */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_release_oid_set)
(OM_uint32 *,             /* minor_status */
 gss_OID_set *            /* set */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_inquire_cred)
(OM_uint32 *,             /* minor_status */
 const gss_cred_id_t,     /* cred_handle */
 gss_name_t *,            /* name */
 OM_uint32 *,             /* lifetime */
 gss_cred_usage_t *,      /* cred_usage */
 gss_OID_set *            /* mechanisms */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_inquire_context)
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 gss_name_t *,            /* src_name */
 gss_name_t *,            /* targ_name */
 OM_uint32 *,             /* lifetime_rec */
 gss_OID *,               /* mech_type */
 OM_uint32 *,             /* ctx_flags */
 int *,                   /* locally_initiated */
 int *                    /* open */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_wrap_size_limit) 
(OM_uint32 *,             /* minor_status */
 const gss_ctx_id_t,      /* context_handle */
 int,                     /* conf_req_flag */
 gss_qop_t,               /* qop_req */
 OM_uint32,               /* req_output_size */
 OM_uint32 *              /* max_input_size */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_add_cred) 
(OM_uint32 *,             /* minor_status */
 const gss_cred_id_t,     /* input_cred_handle */
 const gss_name_t,        /* desired_name */
 const gss_OID,           /* desired_mech */
 gss_cred_usage_t,        /* cred_usage */
 OM_uint32,               /* initiator_time_req */
 OM_uint32,               /* acceptor_time_req */
 gss_cred_id_t *,         /* output_cred_handle */
 gss_OID_set *,           /* actual_mechs */
 OM_uint32 *,             /* initiator_time_rec */
 OM_uint32 *              /* acceptor_time_rec */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_inquire_cred_by_mech) 
(OM_uint32 *,             /* minor_status */
 const gss_cred_id_t,     /* cred_handle */
 const gss_OID,           /* mech_type */
 gss_name_t *,            /* name */
 OM_uint32 *,             /* initiator_lifetime */
 OM_uint32 *,             /* acceptor_lifetime */
 gss_cred_usage_t *       /* cred_usage */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_export_sec_context)
(OM_uint32 *,             /* minor_status */
 gss_ctx_id_t *,          /* context_handle */
 gss_buffer_t             /* interprocess_token */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_import_sec_context)
(OM_uint32 *,             /* minor_status */
 const gss_buffer_t,      /* interprocess_token */
 gss_ctx_id_t *           /* context_handle */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_create_empty_oid_set)
(OM_uint32 *,             /* minor_status */
 gss_OID_set *            /* oid_set */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_add_oid_set_member)
(OM_uint32 *,             /* minor_status */
 const gss_OID,           /* member_oid */
 gss_OID_set *            /* oid_set */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_test_oid_set_member)
(OM_uint32 *,             /* minor_status */
 const gss_OID,           /* member */
 const gss_OID_set,       /* set */
 int *                    /* present */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_inquire_names_for_mech)
(OM_uint32 *,             /* minor_status */
 const gss_OID,           /* mechanism */
 gss_OID_set *            /* name_types */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_inquire_mechs_for_name)
(OM_uint32 *,             /* minor_status */
 const gss_name_t,        /* input_name */
 gss_OID_set *            /* mech_types */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_canonicalize_name)
(OM_uint32 *,             /* minor_status */
 const gss_name_t,        /* input_name */
 const gss_OID,           /* mech_type */
 gss_name_t *             /* output_name */
 );

GSS_MAKE_TYPEDEF
OM_uint32 
GSS_CALLCONV GSS_FUNC(gss_duplicate_name)
(OM_uint32 *,             /* minor_status */
 const gss_name_t,        /* src_name */
 gss_name_t *             /* dest_name */
 );

   /*
    * The following routines are obsolete variants of gss_get_mic,
    * gss_verify_mic, gss_wrap and gss_unwrap.  They should be
    * provided by GSSAPI V2 implementations for backwards
    * compatibility with V1 applications.  Distinct entrypoints
    * (as opposed to #defines) should be provided, both to allow
    * GSSAPI V1 applications to link against GSSAPI V2 implementations,
    * and to retain the slight parameter type differences between the
    * obsolete versions of these routines and their current forms.
    */

   GSS_MAKE_TYPEDEF
   OM_uint32 
   GSS_CALLCONV GSS_FUNC(gss_sign)
              (OM_uint32 *,        /* minor_status */
               gss_ctx_id_t,       /* context_handle */
               int,                /* qop_req */
               gss_buffer_t,       /* message_buffer */
               gss_buffer_t        /* message_token */
              );


   GSS_MAKE_TYPEDEF
   OM_uint32 
   GSS_CALLCONV GSS_FUNC(gss_verify)
              (OM_uint32 *,        /* minor_status */
               gss_ctx_id_t,       /* context_handle */
               gss_buffer_t,       /* message_buffer */
               gss_buffer_t,       /* token_buffer */
               int *               /* qop_state */
              );

   GSS_MAKE_TYPEDEF
   OM_uint32
   GSS_CALLCONV GSS_FUNC(gss_seal)
              (OM_uint32 *,        /* minor_status */
               gss_ctx_id_t,       /* context_handle */
               int,                /* conf_req_flag */
               int,                /* qop_req */
               gss_buffer_t,       /* input_message_buffer */
               int *,              /* conf_state */
               gss_buffer_t        /* output_message_buffer */
              );


   GSS_MAKE_TYPEDEF
   OM_uint32 
   GSS_CALLCONV GSS_FUNC(gss_unseal)
              (OM_uint32 *,        /* minor_status */
               gss_ctx_id_t,       /* context_handle */
               gss_buffer_t,       /* input_message_buffer */
               gss_buffer_t,       /* output_message_buffer */
               int *,              /* conf_state */
               int *               /* qop_state */
              );


EXTERN_C_END

#endif /* GSSAPI_H_ */

